﻿using System.Collections.Generic;
using lp1415_11951_TP2.model;
using System;
using System.IO;
using System.Windows.Forms;


namespace lp1415_11951_TP2
{
    public partial class Main : Form
    {
        private string path;
        private string file = "";
        private string campo;
        private string titulo;
        private short valor1;
        private short valor2;
        private int count = 0;
        private Estatisticas estat;

        public Main()
        {
            InitializeComponent();
            dateTimePicker1.Format = DateTimePickerFormat.Custom;
            dateTimePicker1.CustomFormat = "yyyy";

            dateTimePicker2.Format = DateTimePickerFormat.Custom;
            dateTimePicker2.CustomFormat = "yyyy";
        }

        /// <summary>
        /// Abrir o ficheiro com os dados que irão servir para a geração da base de dadows.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void criarBD(object sender, EventArgs e)
        {

            Stream myStream = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            openFileDialog1.InitialDirectory = @".";
            openFileDialog1.Filter = "Excel files (*.xls)|*.xls|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 1;
            openFileDialog1.RestoreDirectory = true;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((myStream = openFileDialog1.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            file = openFileDialog1.FileName;
                            path = Path.GetFullPath(file);

                            //LerFicheiroExcel ler = new LerFicheiroExcel();
                            CriarBaseDados criar = new CriarBaseDados(path);
                            criar.criaBaseDados();
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
        }

        /// <summary>
        /// Chama as funções para a geração das estatística.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnEstatisticas_Click(object sender, System.EventArgs e)
        {
            bool check = GetCheckedRadio(panel1);
            if (check)
            {
                estat = new Estatisticas();
                estat.estatisticas(titulo, campo, valor1, valor2);
                estat.grafico_estatisticas(titulo, campo, valor1, valor2, count, 1);
              
            }
            else
            {
                MessageBox.Show("Não foi escolhido nenhum gráfico para ser gerado.", "Geração do Gráfico", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }

            //estat = new Estatisticas();
            //estat.estatisticas(titulo, campo, valor1, valor2);
            //estat.grafico_estatisticas(titulo, campo, valor1, valor2, count, 1);
            ////estat.home();
        }

        /// <summary>
        /// Varifica se os os radiobuttons estão desmarcados.
        /// </summary>
        /// <param name="container">Recebe o Panel onde estão contidos os radiobuttons.</param>
        /// <returns></returns>
        bool GetCheckedRadio(Control container)
        {
            foreach (var control in container.Controls)
            {
                RadioButton radio = control as RadioButton;

                if (radio.Checked)
                {
                    return true;
                }
            }
            return false;
        }

        /// <summary>
        /// Ghama as funções para a geração de todos os gráficos.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            Dictionary<string, string> valores = new Dictionary<string, string>();

            valores.Add("Índice de Preços ao Consumidor IPC", "ipc_global");
            valores.Add("Variação Anual Taxa de Inflação", "variacao_anual");
            valores.Add("Remuneração Mínima", "remuneracao_min");
            valores.Add("Remuneração Máxima", "remuneracao_max");
            valores.Add("PIB Per Capta anual", "pib");
            valores.Add("Rendimento Nacional Bruto PC Anual", "rendim_nacional");
            valores.Add("Rendimento Disponível Bruto PC Anual", "rendim_disp");
            valores.Add("Remuneração Per Capta Anual", "remuneracoes_percapita");

            int count = 1;

            foreach (KeyValuePair<string, string> item in valores)
            {
                estat = new Estatisticas();

                if (item.Value.Equals("ipc_global"))
                {
                    radioButton1.PerformClick();
                    estat = new Estatisticas();
                    if (valor2 > 2009)
                    {
                        valor2 = 2009;
                        estat.estatisticas(titulo, campo, valor1, 2009);
                    }
                    else
                    {
                        estat.estatisticas(titulo, campo, valor1, valor2);
                    }

                }
                else if (item.Value.Equals("remuneracao_min"))
                {
                    radioButton3.PerformClick();
                    if (valor2 > 2012)
                    {
                        valor2 = 2012;
                        estat.estatisticas(titulo, campo, valor1, 2012);
                    }
                    else
                    {
                        estat.estatisticas(titulo, campo, valor1, valor2);
                    }
                }
                else if (item.Value.Equals("remuneracao_max"))
                {
                    radioButton4.PerformClick();
                    if (valor2 > 2012)
                    {
                        valor2 = 2012;
                        estat.estatisticas(titulo, campo, valor1, 2012);
                    }
                    else
                    {
                        estat.estatisticas(titulo, campo, valor1, valor2);
                    }
                }
                else if (item.Value.Equals("variacao_anual"))
                {
                    radioButton2.PerformClick();
                    estat.estatisticas(item.Key, campo, valor1, valor2);

                }
                else if (item.Value.Equals("pib"))
                {
                    radioButton5.PerformClick();
                    estat.estatisticas(item.Key, campo, valor1, valor2);
                }
                else if (item.Value.Equals("rendim_nacional"))
                {
                    radioButton6.PerformClick();
                    estat.estatisticas(item.Key, campo, valor1, valor2);
                }
                else if (item.Value.Equals("rendim_disp"))
                {
                    radioButton7.PerformClick();
                    estat.estatisticas(item.Key, campo, valor1, valor2);
                }
                else if (item.Value.Equals("remuneracoes_percapita"))
                {
                    radioButton8.PerformClick();
                    estat.estatisticas(item.Key, campo, valor1, valor2);
                }

                estat.grafico_estatisticas(item.Key, item.Value, valor1, valor2, count, 0);

                count += 1;
            }

            estat.home();

        }

        private void Main_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'iPC_BaseDataSet.IPC_Portugal' table. You can move, or remove it, as needed.
            //this.iPC_PortugalTableAdapter.Fill(this.iPC_BaseDataSet.IPC_Portugal);

        }

        /// <summary>
        /// Chama as funções para geração dos gráficos.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void radioButton_Click(object sender, EventArgs e)
        {
            valor1 = Convert.ToInt16(dateTimePicker1.Value.ToString("yyyy"));
            valor2 = Convert.ToInt16(dateTimePicker2.Value.ToString("yyyy"));

            richTextBox1.Clear();

            if (sender.Equals(radioButton1))
            {
                count = 1;
                campo = "ipc_global";
                titulo = "Índice de Preços ao Consumidor IPC";
                estat = new Estatisticas();
                if (valor2 > 2009)
                {
                    valor2 = 2009;
                    estat.estatisticas(titulo, campo, valor1, 2009);
                }
                else
                {
                    estat.estatisticas(titulo, campo, valor1, valor2);
                }
                
                var items = estat.calculoEstatisticas();
                itemTexto(items);
                return;
            }
            else if (sender.Equals(radioButton2))
            {
                count = 2;
                campo = "variacao_anual";
                titulo = "Variação Anual Taxa de Inflação";
                estat = new Estatisticas();
                estat.estatisticas(titulo, campo, valor1, valor2);
                var items = estat.calculoEstatisticas();
                itemTexto(items);
                return;
            }
            else if (sender.Equals(radioButton3))
            {
                count = 3;
                campo = "remuneracao_min";
                titulo = "Remuneração Mínima";
                estat = new Estatisticas();
                if (valor2 > 2012)
                {
                    valor2 = 2012;
                    estat.estatisticas(titulo, campo, valor1, 2012);
                }
                else
                {
                    estat.estatisticas(titulo, campo, valor1, valor2);
                }
                estat.estatisticas(titulo, campo, valor1, valor2);
                var items = estat.calculoEstatisticas();
                itemTexto(items);
                return;
            }
            else if (sender.Equals(radioButton4))
            {
                count = 4;
                campo = "remuneracao_max";
                titulo = "Remuneração Máxima";
                estat = new Estatisticas();
                if (valor2 > 2012)
                {
                    valor2 = 2012;
                    estat.estatisticas(titulo, campo, valor1, 2012);
                }
                else
                {
                    estat.estatisticas(titulo, campo, valor1, valor2);
                }
                estat.estatisticas(titulo, campo, valor1, valor2);
                var items = estat.calculoEstatisticas();
                itemTexto(items);
                return;
            }
            else if (sender.Equals(radioButton5))
            {
                count = 5;
                campo = "pib";
                titulo = "PIB Per Capta anual";
                estat = new Estatisticas();
                estat.estatisticas(titulo, campo, valor1, valor2);
                var items = estat.calculoEstatisticas();
                itemTexto(items);
                return;
            }
            else if (sender.Equals(radioButton6))
            {
                count = 6;
                campo = "rendim_nacional";
                titulo = "Rendimento Nacional Bruto PC Anual";
                estat = new Estatisticas();
                estat.estatisticas(titulo, campo, valor1, valor2);
                var items = estat.calculoEstatisticas();
                itemTexto(items);
                return;
            }
            else if (sender.Equals(radioButton7))
            {
                count = 7;
                campo = "rendim_disp";
                titulo = "Rendimento Disponível Bruto PC Anual";
                estat = new Estatisticas();
                estat.estatisticas(titulo, campo, valor1, valor2);
                var items = estat.calculoEstatisticas();
                itemTexto(items);
                return;
            }
            else if (sender.Equals(radioButton8))
            {
                count = 8;
                campo = "remuneracoes_percapita";
                titulo = "Remuneração Per Capta Anual";
                estat = new Estatisticas();
                estat.estatisticas(titulo, campo, valor1, valor2);
                var items = estat.calculoEstatisticas();
                itemTexto(items);
                return;
            }
        }

        /// <summary>
        /// Adiciona as linhas da perquisa.
        /// </summary>
        /// <param name="items">Recebe os items a serem adicionados.</param>
        private void itemTexto(List<String> items )
        {
            foreach (var item in items)
            {
                richTextBox1.AppendText(item + "\n\n");
            }
        }

        /// <summary>
        /// Limpar os checkeds.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void radioButton_clear(object sender, EventArgs e)
        {
            richTextBox1.Clear();
            radioButton1.Checked = false;
            radioButton2.Checked = false;
            radioButton3.Checked = false;
            radioButton4.Checked = false;
            radioButton5.Checked = false;
            radioButton6.Checked = false;
            radioButton7.Checked = false;
            radioButton8.Checked = false;
        }

        private void sairToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void sobreOProgramaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AboutBox about = new AboutBox();
            about.Show();
        }

        private void helpToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Após a geração do(s) gráfico(s), estes serão abertos em uma página HTML no seu Navegador favorito.", "Help!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
        }

       
    }
}
